const mongoose = require('mongoose')
const data = require('../student.json')
mongoose.connect('mongodb://127.0.0.1:27017/abc_1')


mongoose.connection.once('open', async () => {
    console.log("连接成功")
    // 字段验证
    let schema = {
        student_id: String, name: String, gender: String, age: Number, grade: String, major: String,
        email: String, phone: String, address: String, gpa: Number, courses: Array
    }
    let studentSchema = new mongoose.Schema(schema)
    const Model = mongoose.model('students', studentSchema)


    try {
        /**
         * 条件运算：大于 $gt  大于等于 $gte  小于 $lt  小于等于 $lte  不等于 $ne
         */
        // 表示 查询年龄大于20的
        // let res = await Model.find({ age: { $gt: 20 } }) 




        /**
         * 逻辑运算
         */
        // 或 $or  相当于 ||
        // let res = await Model.find({ $or: [{ address: "北京市海淀区" }, { address: "深圳市南山区" }] })

        // 与 $and 相对与 &&
        // let res = await Model.find({ $and: [{ address: "北京市海淀区" }, { gender: "男" }] })

        // 非 $nor 相等于 ！
        // let res = await Model.find({ $nor: [{ gender: '男' }] })




        /**
         * 正则表达式 模糊查询
         */
        // 查询名字带李的
        // let res = await Model.find({ name: new RegExp('李') }) 




        /**
         * 返回指定结果
         *  exec() 表示执行
         *  select():表示传入需要返回的结果字段
         *      { name: 1, age: 1, _id: 0 } 和 'name age majo -_id' 效果是一致的
         */
        // let res = await Model.find().select({ name: 1, age: 1, _id: 0 }).exec()




        /**
         * 排序 sort({属性值:1})
         * 1 正序 -1 倒序
         */
        // let res = await Model.find().select({ name: 1, gpa: 1, _id: 0 }).sort({ gpa: -1 }).exec()




        /**
         * 分页查询
         *   skip(10) 表示跳过查询、跳过前10查询全部
         *   limit(10) 表示查询多少个、
         */
        // let res = await Model.find().select('student_id name majo -_id')
        //     .skip(0).limit(10).sort({ student_id: 1 }).exec()


        






        console.log(res);
    } catch (e) {
        console.log(e);
    }


    // console.log(await Model.insertMany(data));
})


